home *** CD-ROM | disk | FTP | other *** search
/ Micromanía 90 / CDMM_90_1.ISO / Cycling Manager 2 / CyclingManager2Demo.exe / Disk1 / data1.cab / Game / DataCM2 / MenuServer / Finance.cnc next >
Encoding:
Text File  |  2002-05-10  |  28.2 KB  |  802 lines

  1.  
  2. func i32x fn_i_CreateCyclistPropositionSubset(i32x _iCyclistId,i32x _iTeamId,i32x _iSens)
  3. {
  4.     var i32x iSubset;
  5.     // create subset on DYN_xchange_goal
  6.     iSubset = Subset_Constructor("PropositioncyclistSubset", DATABASE_SERVER);
  7.     Database_AddTables(iSubset,1);
  8.     Table_SetName(iSubset, 0, "DYN_xchange_cyclist");
  9.     TableSubset_SelectColumns(iSubset, 0, "*");
  10.  
  11.     // create query to fill the subset
  12.     Query_Create(0,iSubset);
  13.     Query_SelectTable(    0, "DYN_xchange_cyclist");
  14.     Query_SelectWhereIntEqual(0,"DYN_xchange_cyclist.fkIDcyclist", _iCyclistId);
  15.     Query_SelectWhereIntEqual(0,"DYN_xchange_cyclist.fkIDteam", _iTeamId);
  16.     Query_SelectWhereIntEqual(0,"DYN_xchange_cyclist.ia_i_sens", _iSens);
  17.     Query_Execute(0);
  18.  
  19.     return iSubset;
  20. }
  21.  
  22. func i32x fn_i_CreateSponsorPropositionSubset(i32x _iSponsorId,i32x _iTeamId,i32x _iSens)
  23. {
  24.     var i32x iSubset;
  25.     // create subset on DYN_xchange_goal
  26.     iSubset = Subset_Constructor("PropositionsponsorSubset", DATABASE_SERVER);
  27.     Database_AddTables(iSubset,1);
  28.     Table_SetName(iSubset, 0, "DYN_xchange_sponsor");
  29.     TableSubset_SelectColumns(iSubset, 0, "*");
  30.  
  31.     // create query to fill the subset
  32.     Query_Create(0,iSubset);
  33.     Query_SelectTable(    0, "DYN_xchange_sponsor");
  34.     Query_SelectWhereIntEqual(0,"DYN_xchange_sponsor.fkIDsponsor", _iSponsorId);
  35.     Query_SelectWhereIntEqual(0,"DYN_xchange_sponsor.fkIDteam", _iTeamId);
  36.     Query_SelectWhereIntEqual(0,"DYN_xchange_sponsor.ia_i_sens", _iSens);
  37.     Query_Execute(0);
  38.  
  39.     return iSubset;
  40. }
  41.  
  42. func i32x fn_i_CreateLayoffPropositionSubset(i32x _iCyclistId,i32x _iTeamId,i32x _iSens)
  43. {
  44.     var i32x iSubset;
  45.     // create subset on DYN_xchange_goal
  46.     iSubset = Subset_Constructor("PropositionlayoffSubset", DATABASE_SERVER);
  47.     Database_AddTables(iSubset,1);
  48.     Table_SetName(iSubset, 0, "DYN_xchange_layoff");
  49.     TableSubset_SelectColumns(iSubset, 0, "*");
  50.  
  51.     // create query to fill the subset
  52.     Query_Create(0,iSubset);
  53.     Query_SelectTable(    0, "DYN_xchange_layoff");
  54.     Query_SelectWhereIntEqual(0,"DYN_xchange_layoff.fkIDcyclist", _iCyclistId);
  55.     Query_SelectWhereIntEqual(0,"DYN_xchange_layoff.fkIDteam", _iTeamId);
  56.     Query_SelectWhereIntEqual(0,"DYN_xchange_layoff.ia_i_sens", _iSens);
  57.     Query_Execute(0);
  58.  
  59.     return iSubset;
  60. }
  61.  
  62. func i32x fn_i_CreateTransfertPropositionSubset(i32x _iCyclistId,i32x _iTeamId,i32x _iSens)
  63. {
  64.     var i32x iSubset;
  65.     // create subset on DYN_xchange_goal
  66.     iSubset = Subset_Constructor("PropostiontransfertSubset", DATABASE_SERVER);
  67.     Database_AddTables(iSubset,1);
  68.     Table_SetName(iSubset, 0, "DYN_xchange_transfert");
  69.     TableSubset_SelectColumns(iSubset, 0, "*");
  70.  
  71.     // create query to fill the subset
  72.     Query_Create(0,iSubset);
  73.     Query_SelectTable(    0, "DYN_xchange_transfert");
  74.     Query_SelectWhereIntEqual(0,"DYN_xchange_transfert.fkIDcyclist", _iCyclistId);
  75.     Query_SelectWhereIntEqual(0,"DYN_xchange_transfert.fkIDteam", _iTeamId);
  76.     Query_SelectWhereIntEqual(0,"DYN_xchange_transfert.ia_i_sens", _iSens);
  77.     Query_Execute(0);
  78.  
  79.     return iSubset;
  80. }
  81.  
  82. func i32x fnReadDB_PropositionSponsor(i32x _iUserId,i32x _iDatabase)
  83. {
  84.     var i32x iTeamId;
  85.     var i32x iXchangeTable,iNumRows;
  86.     var i32x i,iOk;
  87.  
  88.     // Get user team id
  89.     iTeamId = Join_GetIntFromKey(g_stJoins.m_iUser_iTeamId,_iUserId);
  90.  
  91.     // Print source database
  92.     //Database_HTMLDebugPrint(_iDatabase);
  93.  
  94.     // Check db
  95.     iXchangeTable = Table_GetIndexFromName(_iDatabase,"DYN_xchange_sponsor");
  96.     if(iXchangeTable<0)
  97.         return -1;
  98.     iNumRows = Table_GetNumRows(_iDatabase,iXchangeTable);
  99.     print("PropositionSponsor TeamId="+itoa(iTeamId)+" iNumRows="+itoa(iNumRows)+"\n");
  100.     if(iNumRows < 1)
  101.         return -1;
  102.  
  103.     // Sort table by sens
  104.     Table_Sort(_iDatabase,"DYN_xchange_sponsor","ia_i_sens",-1);
  105.  
  106.     // For each row update proposition
  107.     i=0;
  108.     iOk = 1;
  109.     while(i<iNumRows)
  110.     {
  111.         iOk = fn_iReadPropositionSponsorRow(iTeamId,_iDatabase,i);
  112.  
  113.         if(iOk != 1)
  114.             return iOk;
  115.  
  116.         i=i+1;
  117.     }
  118.     Database_SendSynchronization(DATABASE_SERVER);
  119.     //Database_HTMLDebugPrint(DATABASE_SERVER);
  120.     return iOk;
  121. }
  122. func i32x fn_iReadPropositionSponsorRow(i32x _iTeamId,i32x _iDatabase,i32x _iRow)
  123. {
  124.     var i32x iSens,iXChangeId,iSponsorId,iStatus;
  125.     var i32x iSubsetId,iTableSubsetId,iNumExistingProp;
  126.     var i32x iValid;
  127.  
  128.     // Get proposition sens
  129.     iSens = Database_GetIntData(_iDatabase,"DYN_xchange_sponsor.ia_i_sens",ROW_INDEX,_iRow);
  130.  
  131.     // Get proposition Id
  132.     iXChangeId = Database_GetIntData(_iDatabase,"DYN_xchange_sponsor.IDxchange_sponsor",ROW_INDEX,_iRow);
  133.  
  134.     // Get sponsor Id
  135.     iSponsorId = Database_GetIntData(_iDatabase,"DYN_xchange_sponsor.fkIDsponsor",ROW_INDEX,_iRow);
  136.  
  137.     // Get status
  138.     iStatus = Database_GetIntData(_iDatabase,"DYN_xchange_sponsor.fkIDstatus_enum",ROW_INDEX,_iRow);
  139.  
  140.     print("\tRead Sponsor Row="+itoa(_iRow)+" Id="+itoa(iXChangeId)+" with sponsor "+itoa(iSponsorId)+"\n");
  141.     print("\tStatus="+itoa(iStatus)+" iSens="+itoa(iSens)+"\n");
  142.     // Make subset to find existing proposition
  143.     iSubsetId = fn_i_CreateSponsorPropositionSubset(iSponsorId,_iTeamId,iSens);
  144.     iTableSubsetId = Table_GetIndexFromName(iSubsetId,"DYN_xchange_sponsor");
  145.     iNumExistingProp = Table_GetNumRows(iSubsetId,iTableSubsetId);
  146.  
  147.     iValid = 0;
  148.     if(iSens == 1)
  149.     {
  150.         // Team to sponsor proposition
  151.         if(iNumExistingProp>0)
  152.         {
  153.             var i32x iRefXChangeId,iExistXChangeId,iExistXchangeRow;
  154.             // Another proposition exist
  155.             // Update it and mark it as counter
  156.             // Get key
  157.             iExistXChangeId = Database_GetIntData(iSubsetId,"DYN_xchange_sponsor.IDxchange_sponsor",ROW_INDEX,0);
  158.             iExistXchangeRow = Join_GetRow(g_stJoins.m_iXChangeSponsor_iXChangeID,iExistXChangeId,ROW_KEY,ROW_INDEX);
  159.             iRefXChangeId = Join_GetIntFromIndex(g_stJoins.m_iXChangeSponsor_ifkIDXChangeID,iExistXchangeRow);
  160.  
  161.             // Update record
  162.             iValid = fn_iRecordSponsorProposition(_iTeamId,iRefXChangeId,iExistXchangeRow,_iDatabase,_iRow);
  163.         }
  164.         else
  165.         {
  166.             var i32x iNewRow;
  167.             // New proposition
  168.             // Create a new row in DYN_xchange_cyclist
  169.             iNewRow = Table_AddRow(DATABASE_SERVER,Table_GetIndexFromName(DATABASE_SERVER,"DYN_xchange_sponsor"));
  170.  
  171.             // Update record
  172.             iValid = fn_iRecordSponsorProposition(_iTeamId,0,iNewRow,_iDatabase,_iRow);
  173.         }            
  174.     }
  175.     else if(iSens == 0)
  176.     {
  177.         // sponsor to team counter proposition
  178.         if((iStatus==e_Status_Accepted)||(iStatus==e_Status_Refused)||(iStatus==e_Status_Countered))
  179.         {
  180.             // The team has accepted or refused the sponsor counter proposition
  181.             var i32x iRefXChangeId,iExistXChangeId,iExistXchangeRow;
  182.  
  183.             // Update it and mark it as accepted or refused
  184.             // Get key
  185.             iExistXChangeId = Database_GetIntData(iSubsetId,"DYN_xchange_sponsor.IDxchange_sponsor",ROW_INDEX,0);
  186.             iExistXchangeRow = Join_GetRow(g_stJoins.m_iXChangeSponsor_iXChangeID,iExistXChangeId,ROW_KEY,ROW_INDEX);
  187.             iRefXChangeId = Join_GetIntFromIndex(g_stJoins.m_iXChangeSponsor_ifkIDXChangeID,iExistXchangeRow);
  188.  
  189.             // Update answer
  190.             Join_SetIntFromIndex(g_stJoins.m_iXChangeSponsor_iStatusId,iExistXchangeRow,iStatus);
  191.  
  192.             iValid = 1;
  193.         }
  194.     }
  195.  
  196.     // Destroy subset
  197.     Subset_Destructor(iSubsetId);
  198.  
  199.     return iValid;
  200. }
  201. func i32x fn_iRecordSponsorProposition(i32x _iTeamId,i32x _iRefXchangeId,i32x _iExistXchangeRow,i32x _iDatabase,i32x _iRow)
  202. {
  203.     // SponsorID
  204.     Join_SetIntFromIndex(g_stJoins.m_iXChangeSponsor_iSponsorID,_iExistXchangeRow,
  205.         Database_GetIntData(_iDatabase,"DYN_xchange_sponsor.fkIDsponsor",ROW_INDEX,_iRow));
  206.  
  207.     // Team id
  208.     Join_SetIntFromIndex(g_stJoins.m_iXChangeSponsor_iTeamID,_iExistXchangeRow,_iTeamId);
  209.  
  210.     // Sens
  211.     Join_SetIntFromIndex(g_stJoins.m_iXChangeSponsor_iSens,_iExistXchangeRow,
  212.         Database_GetIntData(_iDatabase,"DYN_xchange_sponsor.ia_i_sens",ROW_INDEX,_iRow));
  213.  
  214.     // Status
  215.     var i32x iLastStatus;
  216.     iLastStatus = Join_GetIntFromIndex(g_stJoins.m_iXChangeSponsor_iStatusId,_iExistXchangeRow);
  217.     if((iLastStatus == e_Status_Countered)||(iLastStatus == 0))
  218.         Join_SetIntFromIndex(g_stJoins.m_iXChangeSponsor_iStatusId,_iExistXchangeRow,e_Status_New);
  219.  
  220.     // Duration
  221.     Join_SetIntFromIndex(g_stJoins.m_iXChangeSponsor_iDuration,_iExistXchangeRow,
  222.         Database_GetIntData(_iDatabase,"DYN_xchange_sponsor.finan_i_duration",ROW_INDEX,_iRow));
  223.  
  224.     // Init amount
  225.     Join_SetFloatFromIndex(g_stJoins.m_iXChangeSponsor_fInitAmount,_iExistXchangeRow,
  226.         Database_GetFloatData(_iDatabase,"DYN_xchange_sponsor.finan_f_initial_amount",ROW_INDEX,_iRow));
  227.  
  228.     // Amount
  229.     Join_SetFloatFromIndex(g_stJoins.m_iXChangeSponsor_fAmount,_iExistXchangeRow,
  230.         Database_GetFloatData(_iDatabase,"DYN_xchange_sponsor.finan_f_period_amount",ROW_INDEX,_iRow));
  231.  
  232.     // Old Xchange id
  233.     Join_SetIntFromIndex(g_stJoins.m_iXChangeSponsor_ifkIDXChangeID,_iExistXchangeRow,_iRefXchangeId);
  234.  
  235.     if(_iRefXchangeId>0)
  236.     {
  237.         // Mark other has countered
  238.         Join_SetIntFromKey(g_stJoins.m_iXChangeSponsor_iStatusId,_iRefXchangeId,e_Status_Countered);
  239.     }
  240.  
  241.     // Records proposition goals
  242.     var i32x iXChangeId,iPropXChangeId;
  243.     iPropXChangeId = Database_GetIntData(_iDatabase,"DYN_xchange_sponsor.IDxchange_sponsor",ROW_INDEX,_iRow);
  244.     iXChangeId = Join_GetIntFromIndex(g_stJoins.m_iXChangeSponsor_iXChangeID,_iExistXchangeRow);
  245.     fn_iRecordGoals(iXChangeId,iPropXChangeId,2,_iDatabase);
  246.  
  247.     return 1;
  248. }
  249.  
  250. func i32x fnReadDB_PropositionCyclist(i32x _iUserId,i32x _iDatabase)
  251. {
  252.     var i32x iTeamId;
  253.     var i32x iXchangeTable,iNumRows;
  254.     var i32x i,iOk;
  255.  
  256.     // Get user team id
  257.     iTeamId = Join_GetIntFromKey(g_stJoins.m_iUser_iTeamId,_iUserId);
  258.  
  259.     // Print source database
  260.     //Database_HTMLDebugPrint(_iDatabase);
  261.  
  262.     // Check db
  263.     iXchangeTable = Table_GetIndexFromName(_iDatabase,"DYN_xchange_cyclist");
  264.     if(iXchangeTable<0)
  265.         return -1;
  266.     iNumRows = Table_GetNumRows(_iDatabase,iXchangeTable);
  267.     if(iNumRows < 1)
  268.         return -1;
  269.  
  270.     // Sort table by sens
  271.     Table_Sort(_iDatabase,"DYN_xchange_cyclist","ia_i_sens",-1);
  272.  
  273.     // For each row update proposition
  274.     i=0;
  275.     iOk = 1;
  276.     while(i<iNumRows)
  277.     {
  278.         iOk = fn_iReadPropositionCyclistRow(iTeamId,_iDatabase,i);
  279.  
  280.         if(iOk != 1)
  281.             return iOk;
  282.  
  283.         i=i+1;
  284.     }
  285.     Database_SendSynchronization(DATABASE_SERVER);
  286.     //Database_HTMLDebugPrint(DATABASE_SERVER);
  287.     return iOk;
  288. }
  289. func i32x fn_iReadPropositionCyclistRow(i32x _iTeamId,i32x _iDatabase,i32x _iRow)
  290. {
  291.     var i32x iSens,iXChangeId,iCyclistId,iCyclistTeamId,iStatus;
  292.     var i32x iSubsetId,iTableSubsetId,iNumExistingProp;
  293.     var i32x iValid;
  294.  
  295.     // Get proposition sens
  296.     iSens = Database_GetIntData(_iDatabase,"DYN_xchange_cyclist.ia_i_sens",ROW_INDEX,_iRow);
  297.  
  298.     // Get proposition Id
  299.     iXChangeId = Database_GetIntData(_iDatabase,"DYN_xchange_cyclist.IDxchange_cyclist",ROW_INDEX,_iRow);
  300.  
  301.     // Get cyclist Id
  302.     iCyclistId = Database_GetIntData(_iDatabase,"DYN_xchange_cyclist.fkIDcyclist",ROW_INDEX,_iRow);
  303.     iCyclistTeamId = Join_GetIntFromKey(g_stJoins.m_iCyclist_iTeamId,iCyclistId);
  304.  
  305.     // Get status
  306.     iStatus = Database_GetIntData(_iDatabase,"DYN_xchange_cyclist.fkIDstatus_enum",ROW_INDEX,_iRow);
  307.  
  308.     // Make subset to find existing proposition
  309.     iSubsetId = fn_i_CreateCyclistPropositionSubset(iCyclistId,_iTeamId,iSens);
  310.     iTableSubsetId = Table_GetIndexFromName(iSubsetId,"DYN_xchange_cyclist");
  311.     iNumExistingProp = Table_GetNumRows(iSubsetId,iTableSubsetId);
  312.  
  313.     iValid = 0;
  314.     if(iSens == 0)
  315.     {
  316.         // Team to cyclist proposition
  317.         if(iNumExistingProp>0)
  318.         {
  319.             var i32x iRefXChangeId,iExistXChangeId,iExistXchangeRow;
  320.             // Another proposition exist
  321.             // Get key
  322.             iExistXChangeId = Database_GetIntData(iSubsetId,"DYN_xchange_cyclist.IDxchange_cyclist",ROW_INDEX,0);
  323.             iExistXchangeRow = Join_GetRow(g_stJoins.m_iXChange_iXChangeID,iExistXChangeId,ROW_KEY,ROW_INDEX);
  324.             iRefXChangeId = Join_GetIntFromIndex(g_stJoins.m_iXChange_ifkIDXChangeID,iExistXchangeRow);
  325.  
  326.             // Update record
  327.             iValid = fn_iRecordCyclistProposition(_iTeamId,iRefXChangeId,iExistXchangeRow,_iDatabase,_iRow);
  328.         }
  329.         else
  330.         {
  331.             var i32x iNewRow;
  332.             // New proposition
  333.             // Create a new row in DYN_xchange_cyclist
  334.             iNewRow = Table_AddRow(DATABASE_SERVER,Table_GetIndexFromName(DATABASE_SERVER,"DYN_xchange_cyclist"));
  335.  
  336.             // Update record
  337.             iValid = fn_iRecordCyclistProposition(_iTeamId,0,iNewRow,_iDatabase,_iRow);
  338.         }            
  339.     }
  340.     else if(iSens == 1)
  341.     {
  342.         // Cyclist to team counter proposition
  343.         if((iStatus==e_Status_Accepted)||(iStatus==e_Status_Refused)||(iStatus==e_Status_Countered))
  344.         {
  345.             // The team has accepted or refused the cyclist counter proposition
  346.             var i32x iRefXChangeId,iExistXChangeId,iExistXchangeRow;
  347.  
  348.             // Update it and mark it as accepted or refused
  349.             // Get key
  350.             iExistXChangeId = Database_GetIntData(iSubsetId,"DYN_xchange_cyclist.IDxchange_cyclist",ROW_INDEX,0);
  351.             iExistXchangeRow = Join_GetRow(g_stJoins.m_iXChange_iXChangeID,iExistXChangeId,ROW_KEY,ROW_INDEX);
  352.             iRefXChangeId = Join_GetIntFromIndex(g_stJoins.m_iXChange_ifkIDXChangeID,iExistXchangeRow);
  353.  
  354.             // Update answer
  355.             Join_SetIntFromIndex(g_stJoins.m_iXChange_iStatusId,iExistXchangeRow,iStatus);
  356.  
  357.             iValid = 1;
  358.         }
  359.     }
  360.  
  361.     // Destroy subset
  362.     Subset_Destructor(iSubsetId);
  363.  
  364.     return iValid;
  365. }
  366.  
  367. func i32x fn_iRecordCyclistProposition(i32x _iTeamId,i32x _iRefXchangeId,i32x _iExistXchangeRow,i32x _iDatabase,i32x _iRow)
  368. {
  369.     // CyclistID
  370.     Join_SetIntFromIndex(g_stJoins.m_iXChange_iCyclistID,_iExistXchangeRow,
  371.         Database_GetIntData(_iDatabase,"DYN_xchange_cyclist.fkIDcyclist",ROW_INDEX,_iRow));
  372.  
  373.     // Team id
  374.     Join_SetIntFromIndex(g_stJoins.m_iXChange_iTeamID,_iExistXchangeRow,_iTeamId);
  375.  
  376.     // Sens
  377.     Join_SetIntFromIndex(g_stJoins.m_iXChange_iSens,_iExistXchangeRow,
  378.         Database_GetIntData(_iDatabase,"DYN_xchange_cyclist.ia_i_sens",ROW_INDEX,_iRow));
  379.  
  380.     // Status = NEW
  381.     var i32x iLastStatus;
  382.     iLastStatus = Join_GetIntFromIndex(g_stJoins.m_iXChange_iStatusId,_iExistXchangeRow);
  383.     if((iLastStatus == e_Status_Countered)||(iLastStatus == 0))
  384.         Join_SetIntFromIndex(g_stJoins.m_iXChange_iStatusId,_iExistXchangeRow,e_Status_New);
  385.  
  386.     // Duration
  387.     Join_SetIntFromIndex(g_stJoins.m_iXChange_iDuration,_iExistXchangeRow,
  388.         Database_GetIntData(_iDatabase,"DYN_xchange_cyclist.finan_i_duration",ROW_INDEX,_iRow));
  389.  
  390.     // Init amount
  391.     Join_SetFloatFromIndex(g_stJoins.m_iXChange_fInitAmount,_iExistXchangeRow,
  392.         Database_GetFloatData(_iDatabase,"DYN_xchange_cyclist.finan_f_initial_amount",ROW_INDEX,_iRow));
  393.  
  394.     // Amount
  395.     Join_SetFloatFromIndex(g_stJoins.m_iXChange_fAmount,_iExistXchangeRow,
  396.         Database_GetFloatData(_iDatabase,"DYN_xchange_cyclist.finan_f_period_wage",ROW_INDEX,_iRow));
  397.  
  398.     // Old Xchange id
  399.     Join_SetIntFromIndex(g_stJoins.m_iXChange_ifkIDXChangeID,_iExistXchangeRow,_iRefXchangeId);
  400.  
  401.     if(_iRefXchangeId>0)
  402.     {
  403.         // Mark other has countered
  404.         Join_SetIntFromKey(g_stJoins.m_iXChange_iStatusId,_iRefXchangeId,e_Status_Countered);
  405.     }
  406.  
  407.     // Records proposition goals
  408.     var i32x iXChangeId,iPropXChangeId;
  409.     iPropXChangeId = Database_GetIntData(_iDatabase,"DYN_xchange_cyclist.IDxchange_cyclist",ROW_INDEX,_iRow);
  410.     iXChangeId = Join_GetIntFromIndex(g_stJoins.m_iXChange_iXChangeID,_iExistXchangeRow);
  411.     fn_iRecordGoals(iXChangeId,iPropXChangeId,0,_iDatabase);
  412.  
  413.     return 1;
  414. }
  415.  
  416. func i32x fnReadDB_PropositionLayoff(i32x _iUserId,i32x _iDatabase)
  417. {
  418.     var i32x iTeamId;
  419.     var i32x iXchangeTable,iNumRows;
  420.     var i32x i,iOk;
  421.  
  422.     // Get user team id
  423.     iTeamId = Join_GetIntFromKey(g_stJoins.m_iUser_iTeamId,_iUserId);
  424.  
  425.     // Print source database
  426.     //Database_HTMLDebugPrint(_iDatabase);
  427.  
  428.     // Check db
  429.     iXchangeTable = Table_GetIndexFromName(_iDatabase,"DYN_xchange_layoff");
  430.     if(iXchangeTable<0)
  431.         return -1;
  432.     iNumRows = Table_GetNumRows(_iDatabase,iXchangeTable);
  433.     if(iNumRows < 1)
  434.         return -1;
  435.  
  436.     // Sort table by sens
  437.     Table_Sort(_iDatabase,"DYN_xchange_layoff","ia_i_sens",-1);
  438.  
  439.     // For each row update proposition
  440.     i=0;
  441.     iOk = 1;
  442.     while(i<iNumRows)
  443.     {
  444.         iOk = fn_iReadPropositionLayoffRow(iTeamId,_iDatabase,i);
  445.  
  446.         if(iOk != 1)
  447.             return iOk;
  448.  
  449.         i=i+1;
  450.     }
  451.     Database_SendSynchronization(DATABASE_SERVER);
  452.     //Database_HTMLDebugPrint(DATABASE_SERVER);
  453.     return iOk;
  454. }
  455. func i32x fn_iReadPropositionLayoffRow(i32x _iTeamId,i32x _iDatabase,i32x _iRow)
  456. {
  457.     var i32x iSens,iXChangeId,iCyclistId,iCyclistTeamId,iStatus;
  458.     var i32x iSubsetId,iTableSubsetId,iNumExistingProp;
  459.     var i32x iValid;
  460.  
  461.     // Get proposition sens
  462.     iSens = Database_GetIntData(_iDatabase,"DYN_xchange_layoff.ia_i_sens",ROW_INDEX,_iRow);
  463.  
  464.     // Get proposition Id
  465.     iXChangeId = Database_GetIntData(_iDatabase,"DYN_xchange_layoff.IDxchange_layoff",ROW_INDEX,_iRow);
  466.  
  467.     // Get cyclist Id
  468.     iCyclistId = Database_GetIntData(_iDatabase,"DYN_xchange_layoff.fkIDcyclist",ROW_INDEX,_iRow);
  469.     iCyclistTeamId = Join_GetIntFromKey(g_stJoins.m_iCyclist_iTeamId,iCyclistId);
  470.  
  471.     // Get status
  472.     iStatus = Database_GetIntData(_iDatabase,"DYN_xchange_layoff.fkIDstatus_enum",ROW_INDEX,_iRow);
  473.  
  474.     // Make subset to find existing proposition
  475.     iSubsetId = fn_i_CreateLayoffPropositionSubset(iCyclistId,_iTeamId,iSens);
  476.     iTableSubsetId = Table_GetIndexFromName(iSubsetId,"DYN_xchange_layoff");
  477.     iNumExistingProp = Table_GetNumRows(iSubsetId,iTableSubsetId);
  478.  
  479.     iValid = 0;
  480.     if(iSens == 0)
  481.     {
  482.         // Team to cyclist proposition
  483.         if(iNumExistingProp>0)
  484.         {
  485.             var i32x iRefXChangeId,iExistXChangeId,iExistXchangeRow;
  486.             // Another proposition exist
  487.             // Update it and mark it as counter
  488.             // Get key
  489.             iExistXChangeId = Database_GetIntData(iSubsetId,"DYN_xchange_layoff.IDxchange_layoff",ROW_INDEX,0);
  490.             iExistXchangeRow = Join_GetRow(g_stJoins.m_iXChangeLayoff_iXChangeID,iExistXChangeId,ROW_KEY,ROW_INDEX);
  491.             iRefXChangeId = Join_GetIntFromIndex(g_stJoins.m_iXChangeLayoff_ifkIDXChangeID,iExistXchangeRow);
  492.  
  493.             // Update record
  494.             iValid = fn_iRecordLayoffProposition(_iTeamId,iRefXChangeId,iExistXchangeRow,_iDatabase,_iRow);
  495.         }
  496.         else
  497.         {
  498.             var i32x iNewRow;
  499.             // New proposition
  500.             // Create a new row in DYN_xchange_cyclist
  501.             iNewRow = Table_AddRow(DATABASE_SERVER,Table_GetIndexFromName(DATABASE_SERVER,"DYN_xchange_layoff"));
  502.  
  503.             // Update record
  504.             iValid = fn_iRecordLayoffProposition(_iTeamId,0,iNewRow,_iDatabase,_iRow);
  505.         }            
  506.     }
  507.     else if(iSens == 1)
  508.     {
  509.         // Team buyer to team seller proposition
  510.         if((iStatus==e_Status_Accepted)||(iStatus==e_Status_Refused)||(iStatus==e_Status_Countered))
  511.         {
  512.             // The team has accepted or refused the cyclist counter proposition
  513.             var i32x iRefXChangeId,iExistXChangeId,iExistXchangeRow;
  514.  
  515.             // Update it and mark it as accepted or refused
  516.             // Get key
  517.             iExistXChangeId = Database_GetIntData(iSubsetId,"DYN_xchange_layoff.IDxchange_layoff",ROW_INDEX,0);
  518.             iExistXchangeRow = Join_GetRow(g_stJoins.m_iXChangeLayoff_iXChangeID,iExistXChangeId,ROW_KEY,ROW_INDEX);
  519.             iRefXChangeId = Join_GetIntFromIndex(g_stJoins.m_iXChangeLayoff_ifkIDXChangeID,iExistXchangeRow);
  520.  
  521.             // Update answer
  522.             Join_SetIntFromIndex(g_stJoins.m_iXChangeLayoff_iStatusId,iExistXchangeRow,iStatus);
  523.  
  524.             iValid = 1;
  525.         }
  526.     }
  527.  
  528.     // Destroy subset
  529.     Subset_Destructor(iSubsetId);
  530.  
  531.     return iValid;
  532. }
  533.  
  534. func i32x fn_iRecordLayoffProposition(i32x _iTeamId,i32x _iRefXchangeId,i32x _iExistXchangeRow,i32x _iDatabase,i32x _iRow)
  535. {
  536.     // CyclistID
  537.     Join_SetIntFromIndex(g_stJoins.m_iXChangeLayoff_iCyclistID,_iExistXchangeRow,
  538.         Database_GetIntData(_iDatabase,"DYN_xchange_layoff.fkIDcyclist",ROW_INDEX,_iRow));
  539.  
  540.     // Team id
  541.     Join_SetIntFromIndex(g_stJoins.m_iXChangeLayoff_iTeamID,_iExistXchangeRow,_iTeamId);
  542.  
  543.     // Sens
  544.     Join_SetIntFromIndex(g_stJoins.m_iXChangeLayoff_iSens,_iExistXchangeRow,
  545.         Database_GetIntData(_iDatabase,"DYN_xchange_layoff.ia_i_sens",ROW_INDEX,_iRow));
  546.  
  547.     // Status
  548.     var i32x iLastStatus;
  549.     iLastStatus = Join_GetIntFromIndex(g_stJoins.m_iXChangeLayoff_iStatusId,_iExistXchangeRow);
  550.     if((iLastStatus == e_Status_Countered)||(iLastStatus == 0))
  551.         Join_SetIntFromIndex(g_stJoins.m_iXChangeLayoff_iStatusId,_iExistXchangeRow,e_Status_New);
  552.  
  553.     // Init amount
  554.     Join_SetFloatFromIndex(g_stJoins.m_iXChangeLayoff_fInitAmount,_iExistXchangeRow,
  555.         Database_GetFloatData(_iDatabase,"DYN_xchange_layoff.finan_f_indemnities",ROW_INDEX,_iRow));
  556.  
  557.     // Old Xchange id
  558.     Join_SetIntFromIndex(g_stJoins.m_iXChangeLayoff_ifkIDXChangeID,_iExistXchangeRow,_iRefXchangeId);
  559.  
  560.     if(_iRefXchangeId>0)
  561.     {
  562.         // Mark other has countered
  563.         Join_SetIntFromKey(g_stJoins.m_iXChangeLayoff_iStatusId,_iRefXchangeId,e_Status_Countered);
  564.     }
  565.     return 1;
  566. }
  567.  
  568.  
  569. func i32x fnReadDB_PropositionTransfert(i32x _iUserId,i32x _iDatabase)
  570. {
  571.     var i32x iTeamId;
  572.     var i32x iXchangeTable,iNumRows;
  573.     var i32x i,iOk;
  574.  
  575.     // Get user team id
  576.     iTeamId = Join_GetIntFromKey(g_stJoins.m_iUser_iTeamId,_iUserId);
  577.  
  578.     // Print source database
  579.     //Database_HTMLDebugPrint(_iDatabase);
  580.  
  581.     // Check db
  582.     iXchangeTable = Table_GetIndexFromName(_iDatabase,"DYN_xchange_transfert");
  583.     if(iXchangeTable<0)
  584.         return -1;
  585.     iNumRows = Table_GetNumRows(_iDatabase,iXchangeTable);
  586.     if(iNumRows < 1)
  587.         return -1;
  588.  
  589.     // Sort table by sens
  590.     Table_Sort(_iDatabase,"DYN_xchange_transfert","ia_i_sens",1);
  591.  
  592.     // For each row update proposition
  593.     i=0;
  594.     iOk = 1;
  595.     while(i<iNumRows)
  596.     {
  597.         iOk = fn_iReadPropositionTransfertRow(iTeamId,_iDatabase,i);
  598.  
  599.         if(iOk != 1)
  600.             return iOk;
  601.  
  602.         i=i+1;
  603.     }
  604.     Database_SendSynchronization(DATABASE_SERVER);
  605.     //Database_HTMLDebugPrint(DATABASE_SERVER);
  606.     return iOk;
  607. }
  608. func i32x fn_iReadPropositionTransfertRow(i32x _iTeamId,i32x _iDatabase,i32x _iRow)
  609. {
  610.     var i32x iSens,iXChangeId,iCyclistId,iCyclistTeamId,iStatus;
  611.     var i32x iSubsetId,iTableSubsetId,iNumExistingProp;
  612.     var i32x iValid;
  613.  
  614.     // Get proposition sens
  615.     iSens = Database_GetIntData(_iDatabase,"DYN_xchange_transfert.ia_i_sens",ROW_INDEX,_iRow);
  616.  
  617.     // Get proposition Id
  618.     iXChangeId = Database_GetIntData(_iDatabase,"DYN_xchange_transfert.IDxchange_transfert",ROW_INDEX,_iRow);
  619.  
  620.     // Get cyclist Id
  621.     iCyclistId = Database_GetIntData(_iDatabase,"DYN_xchange_transfert.fkIDcyclist",ROW_INDEX,_iRow);
  622.     iCyclistTeamId = Join_GetIntFromKey(g_stJoins.m_iCyclist_iTeamId,iCyclistId);
  623.  
  624.     // Get status
  625.     iStatus = Database_GetIntData(_iDatabase,"DYN_xchange_transfert.fkIDstatus_enum",ROW_INDEX,_iRow);
  626.  
  627.     // Make subset to find existing proposition
  628.     iSubsetId = fn_i_CreateTransfertPropositionSubset(iCyclistId,_iTeamId,iSens);
  629.     iTableSubsetId = Table_GetIndexFromName(iSubsetId,"DYN_xchange_transfert");
  630.     iNumExistingProp = Table_GetNumRows(iSubsetId,iTableSubsetId);
  631.  
  632.     iValid = 0;
  633.     if(iSens == 0)
  634.     {
  635.         // Team buyer to seller proposition
  636.         if(iNumExistingProp>0)
  637.         {
  638.             var i32x iRefXChangeId,iExistXChangeId,iExistXchangeRow;
  639.             // Another proposition exist
  640.             // Update it and mark it as counter
  641.             // Get key
  642.             iExistXChangeId = Database_GetIntData(iSubsetId,"DYN_xchange_transfert.IDxchange_transfert",ROW_INDEX,0);
  643.             iExistXchangeRow = Join_GetRow(g_stJoins.m_iXChangeTransfert_iXChangeID,iExistXChangeId,ROW_KEY,ROW_INDEX);
  644.             iRefXChangeId = Join_GetIntFromIndex(g_stJoins.m_iXChangeTransfert_ifkIDXChangeID,iExistXchangeRow);
  645.  
  646.             // Update record
  647.             iValid = fn_iRecordTransfertProposition(_iTeamId,iRefXChangeId,iExistXchangeRow,_iDatabase,_iRow);
  648.         }
  649.         else
  650.         {
  651.             var i32x iNewRow;
  652.             // New proposition
  653.             // Create a new row in DYN_xchange_cyclist
  654.             iNewRow = Table_AddRow(DATABASE_SERVER,Table_GetIndexFromName(DATABASE_SERVER,"DYN_xchange_transfert"));
  655.  
  656.             // Update record
  657.             iValid = fn_iRecordTransfertProposition(_iTeamId,0,iNewRow,_iDatabase,_iRow);
  658.         }            
  659.     }
  660.     else if(iSens == 1)
  661.     {
  662.         // Team seller to team buyer proposition
  663.         if((iStatus==e_Status_Accepted)||(iStatus==e_Status_Refused)||(iStatus==e_Status_Countered))
  664.         {
  665.             // The team has accepted or refused the cyclist counter proposition
  666.             var i32x iRefXChangeId,iExistXChangeId,iExistXchangeRow;
  667.  
  668.             // Update it and mark it as accepted or refused
  669.             // Get key
  670.             iExistXChangeId = Database_GetIntData(iSubsetId,"DYN_xchange_transfert.IDxchange_transfert",ROW_INDEX,0);
  671.             iExistXchangeRow = Join_GetRow(g_stJoins.m_iXChangeTransfert_iXChangeID,iExistXChangeId,ROW_KEY,ROW_INDEX);
  672.             iRefXChangeId = Join_GetIntFromIndex(g_stJoins.m_iXChangeTransfert_ifkIDXChangeID,iExistXchangeRow);
  673.  
  674.             // Update answer
  675.             Join_SetIntFromIndex(g_stJoins.m_iXChangeTransfert_iStatusId,iExistXchangeRow,iStatus);
  676.  
  677.             iValid = 1;
  678.         }
  679.     }
  680.     // Destroy subset
  681.     Subset_Destructor(iSubsetId);
  682.  
  683.     return iValid;
  684. }
  685.  
  686. func i32x fn_iRecordTransfertProposition(i32x _iTeamId,i32x _iRefXchangeId,i32x _iExistXchangeRow,i32x _iDatabase,i32x _iRow)
  687. {
  688.     // CyclistID
  689.     println("Transfert of cyclist:"+itoa(Database_GetIntData(_iDatabase,"DYN_xchange_transfert.fkIDcyclist",ROW_INDEX,_iRow)));
  690.     Join_SetIntFromIndex(g_stJoins.m_iXChangeTransfert_iCyclistID,_iExistXchangeRow,
  691.         Database_GetIntData(_iDatabase,"DYN_xchange_transfert.fkIDcyclist",ROW_INDEX,_iRow));
  692.  
  693.     // Team id
  694.     Join_SetIntFromIndex(g_stJoins.m_iXChangeTransfert_iTeamID,_iExistXchangeRow,_iTeamId);
  695.  
  696.     // Sens
  697.     Join_SetIntFromIndex(g_stJoins.m_iXChangeTransfert_iSens,_iExistXchangeRow,
  698.         Database_GetIntData(_iDatabase,"DYN_xchange_transfert.ia_i_sens",ROW_INDEX,_iRow));
  699.  
  700.     // Change status to new only if last has been countered
  701.     var i32x iLastStatus;
  702.     iLastStatus = Join_GetIntFromIndex(g_stJoins.m_iXChangeTransfert_iStatusId,_iExistXchangeRow);
  703.     if((iLastStatus == e_Status_Countered)||(iLastStatus == 0))
  704.         Join_SetIntFromIndex(g_stJoins.m_iXChangeTransfert_iStatusId,_iExistXchangeRow,e_Status_New);
  705.  
  706.     // Init amount
  707.     Join_SetFloatFromIndex(g_stJoins.m_iXChangeTransfert_fInitAmount,_iExistXchangeRow,
  708.         Database_GetFloatData(_iDatabase,"DYN_xchange_transfert.finan_f_period_amount",ROW_INDEX,_iRow));
  709.  
  710.     // Old Xchange id
  711.     Join_SetIntFromIndex(g_stJoins.m_iXChangeTransfert_ifkIDXChangeID,_iExistXchangeRow,_iRefXchangeId);
  712.  
  713.     // Mark it as last
  714.     Join_SetIntFromIndex(g_stJoins.m_iXChangeTransfert_iLast,_iExistXchangeRow,1);
  715.  
  716.     // Unvalid last flag of old xchange id
  717.     if(_iRefXchangeId)
  718.     {
  719.         Join_SetIntFromKey(g_stJoins.m_iXChangeTransfert_iLast,_iRefXchangeId,0);
  720.         // And mark other has countered
  721.         Join_SetIntFromKey(g_stJoins.m_iXChangeTransfert_iStatusId,_iRefXchangeId,e_Status_Countered);
  722.     }
  723.  
  724.     return 1;
  725. }
  726.  
  727. func i32x fn_iRecordGoals(i32x _iExistXChangeId,i32x _iPropXChangeId,i32x _iType,i32x _iDatabase)
  728. {
  729.     var i32x iSubsetId,iNumExistRows,iNumNewRows,iSrcSubsetId;
  730.     var i32x iJoin_GoalId,iJoin_fAmount,iJoin_iType,iJoin_fkIdXchange;
  731.     var i32x iSrcJoin_GoalId,iSrcJoin_fAmount;
  732.     var i32x i,iRow,iTableId,iGoalId;
  733.     var f32x fAmount;
  734.     // Create subset with existing goals in database
  735.     iSubsetId = Subset_Constructor("SUBSET_GOALS",DATABASE_SERVER);
  736.     Database_AddTables(iSubsetId,1);
  737.     Table_SetName(iSubsetId, 0, "DYN_xchange_goal");
  738.     TableSubset_SelectColumns(iSubsetId,0,"*");
  739.     Query_Create(0,iSubsetId);
  740.     Query_SelectTable(0,"DYN_xchange_goal");
  741.     Query_SelectWhereIntEqual(0,"DYN_xchange_goal.gene_i_xchange_type",_iType);
  742.     Query_SelectWhereIntEqual(0,"DYN_xchange_goal.fkIDxchange",_iExistXChangeId);
  743.     Query_Execute(0);
  744.  
  745.     // Join on server database
  746.     iTableId = Table_GetIndexFromName(iSubsetId,"DYN_xchange_goal");
  747.     iJoin_GoalId = Join_Constructor(iSubsetId,"DYN_xchange_goal.fkIDgoal");
  748.     iJoin_fAmount = Join_Constructor(iSubsetId,"DYN_xchange_goal.finan_f_bonus");
  749.     iJoin_fkIdXchange = Join_Constructor(iSubsetId,"DYN_xchange_goal.fkIDxchange");
  750.     iJoin_iType = Join_Constructor(iSubsetId,"DYN_xchange_goal.gene_i_xchange_type");
  751.     iNumExistRows = Join_GetNumRows(iJoin_GoalId);
  752.  
  753.     // Create subset with proposition goals in database
  754.     iSrcSubsetId = Subset_Constructor("SUBSET_USERGOALS",_iDatabase);
  755.     Database_AddTables(iSrcSubsetId,1);
  756.     Table_SetName(iSrcSubsetId, 0, "DYN_xchange_goal");
  757.     TableSubset_SelectColumns(iSrcSubsetId,0,"*");
  758.     Query_Create(0,iSrcSubsetId);
  759.     Query_SelectTable(0,"DYN_xchange_goal");
  760.     Query_SelectWhereIntEqual(0,"DYN_xchange_goal.gene_i_xchange_type",_iType);
  761.     Query_SelectWhereIntEqual(0,"DYN_xchange_goal.fkIDxchange",_iPropXChangeId);
  762.     Query_Execute(0);
  763.  
  764.  
  765.     // Join on user database
  766.     iSrcJoin_GoalId = Join_Constructor(iSrcSubsetId,"DYN_xchange_goal.fkIDgoal");
  767.     iSrcJoin_fAmount = Join_Constructor(iSrcSubsetId,"DYN_xchange_goal.finan_f_bonus");
  768.     iNumNewRows = Join_GetNumRows(iSrcJoin_GoalId);
  769.  
  770.     i=0;
  771.     while(i<iNumNewRows)
  772.     {
  773.         iGoalId = Join_GetIntFromIndex(iSrcJoin_GoalId,i);
  774.         fAmount = Join_GetFloatFromIndex(iSrcJoin_fAmount,i);
  775.  
  776.         if(i>=iNumExistRows)
  777.         {
  778.             iRow = Table_AddRow(iSubsetId,iTableId);
  779.             Join_SetIntFromIndex(iJoin_fkIdXchange,iRow,_iExistXChangeId);
  780.             Join_SetIntFromIndex(iJoin_iType,iRow,_iType);
  781.         }
  782.         else
  783.         {
  784.             iRow = i;
  785.         }
  786.         Join_SetIntFromIndex(iJoin_GoalId,iRow,iGoalId);
  787.         Join_SetFloatFromIndex(iJoin_fAmount,iRow,fAmount);
  788.         i=i+1;
  789.     }
  790.  
  791.     Join_Destructor(iSrcJoin_GoalId);
  792.     Join_Destructor(iSrcJoin_fAmount);
  793.  
  794.     Join_Destructor(iJoin_GoalId);
  795.     Join_Destructor(iJoin_fAmount);
  796.     Join_Destructor(iJoin_fkIdXchange);
  797.     Join_Destructor(iJoin_iType);
  798.  
  799.     Subset_Destructor(iSrcSubsetId);
  800.     Subset_Destructor(iSubsetId);
  801.     return 1;
  802. }